package com.by.constant;

import lombok.Data;

/**
 * @version 1.0
 * @Author 彭彦彬
 * @Date 2025/4/16 20:26
 * @注释
 */

/**
 * 统一结果封装类
 *
 * @param <T> 泛型类型，表示返回数据的具体类型
 */
@Data
public class Result<T> {

    /**
     * 状态码
     */
    private int code;

    /**
     * 提示信息
     */
    private String msg;

    /**
     * 返回的数据
     */
    private T data;

    /**
     * 私有构造方法，防止外部直接实例化
     */
    private Result() {}

    /**
     * 成功时调用的方法
     *
     * @param data 返回的数据
     * @param <T>  数据类型
     * @return 包含成功状态的结果对象
     */
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setCode(200); // 假设 200 表示成功
        result.setMsg("操作成功");
        result.setData(data);
        return result;
    }

    /**
     * 失败时调用的方法
     *
     * @param code 错误码
     * @param msg  错误信息
     * @param <T>  数据类型
     * @return 包含失败状态的结果对象
     */
    public static <T> Result<T> failure(int code, String msg) {
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMsg(msg);
        result.setData(null); // 失败时通常没有返回数据
        return result;
    }

    /**
     * 快速创建一个成功的空结果
     *
     * @param <T> 数据类型
     * @return 包含成功状态的空结果对象
     */
    public static <T> Result<T> success() {
        return success(null);
    }
}